package com.oop.neibulei;

//静态内部类：就是位于外部类成员位置的static的类

public class Tes_neibulei_4 {
    public static void main(String[] args) {
        Outer10 outer10 = new Outer10();
        outer10.m1();
        //方式一
        //因为静态内部类，是可以通过类目直接访问的
        Outer10.Inner10 inner10 = new Outer10.Inner10();
        inner10.say();

        //方式二
        //编写一个方法，可以返回静态内部类的实例对象
        Outer10.Inner10 inner101 = outer10.getInner10();   //非静态方法返回
        System.out.println(".........");
        inner101.say();

        Outer10.Inner10 inner10_ = Outer10.getInner10_();  //静态方法返回
        System.out.println("*********");
        inner10_.say();
    }
}

class Outer10 {  //外部类
    private int n1 = 10;
    private static String name = "张三";
    private static void cry(){

    }

//1.不能使用外部类的非static成员变量和成员方法
//解释：即使没有外部类对象，也可以创建静态内部类对象，而外部类的非static成员必须依赖于对象的调用，静态成员则可以直接使用类调用，不必依赖于外部类的对象，
//     所以静态内部类只能访问静态的外部属性和方法。
    public static class Inner10 {
        public void say(){
            System.out.println(name);
            cry();
        }
    }

    public void m1(){
        Inner10 inner10 = new Inner10();
        inner10.say();
    }

    public Inner10 getInner10(){
        return new Inner10();
    }

    public static Inner10 getInner10_(){
        return new Inner10();
    }

}
